package dao

import (
	"log"
	"order_srv/basic/config"
	"order_srv/handler/models"
	"time"
)

// 定时任务处理预约订单
func StartScheduledOrderProcessor() {
	// 每30秒检查一次是否有预约订单需要处理
	ticker := time.NewTicker(30 * time.Second)
	go func() {
		for range ticker.C {
			processScheduledOrders()
		}
	}()
}

// 处理预约订单
func processScheduledOrders() {
	// 获取当前时间
	now := time.Now()
	// 查询30秒内需要开始处理的预约订单
	threshold := now.Add(60 * time.Second)

	var orders []models.Orders
	// 查询条件：订单类型为预约单(2)，订单状态为待接单(1)，且预约时间在当前时间和阈值之间
	err := config.DB.Where("order_type = ? AND order_status = ? AND service_start_time BETWEEN ? AND ?", 2, 1, now, threshold).Find(&orders).Error
	if err != nil {
		log.Printf("查询预约订单失败: %v", err)
		return
	}

	// 处理每个符合条件的订单
	for _, order := range orders {
		// 发送订单到司机匹配系统或执行其他必要操作
		log.Printf("处理预约订单: %s, 预约时间: %v", order.OrderSn, order.ServiceStartTime)

		// 这里可以添加更多业务逻辑，比如推送通知、更新订单状态等
	}
}
